【JavaScript】多次元配列 - 配列を階層的に記憶するデータ構造
JavaScriptの多次元配列について解説します。
検証環境
多次元配列
多次元配列は“配列が階層的になっているデータ構造の配列”です。
配列が記憶する値が配列であるデータ構造で、その階層数に応じて2次元配列や3次元配列と呼びます。
多次元配列のための特別な仕組みはなく、配列や連想配列を使って多次元配列を表現します。
多次元配列の生成
多次元配列の生成は通常の配列や連想配列と同じです。
基本構文
// 配列の場合
変数 = []
// 多次元配列の場合
変数 = {}
サンプル
___ih_hl_start
let fruits = [];
___ih_hl_end
console.log(fruits);
[]
このサンプルの段階では変数fruits
は値に配列を持たないため、1次元配列です。
多次元配列の初期化
配列の初期化で値に配列を記述することで、多次元配列を表現できます。
基本構文
変数 = [
[ 値1, 値2, 値3 ],
[ 値4, 値5, 値6 ],
[ 値7, 値8, 値9 ]
]
2〜4行目は各行が1つ1つの配列になっています。
更にその中に配列を記述して、3次元配列、4次元配列と次元数を増やすことが可能です。
サンプル
___ih_hl_start
let fruits = [
{ name: 'Apple', price: 150 },
{ name: 'Orange', price: 100 },
{ name: 'Melon', price: 2300 }
];
___ih_hl_end
console.log(fruits);
(3) [{…}, {…}, {…}]
0:
name: "Apple"
price: 150
1:
name: "Orange"
price: 100
2:
name: "Melon"
price: 2300
1〜5行目が多次元配列の初期化です。
変数fruits
は多次元配列を3つ記憶する2次元配列になっています。
値の取得
多次元配列の値を取得するには次元ごとのキーを指定します。
基本構文
変数[キー1][キー2]...
取得する値までのキーを次元ごとに[キー]
の形式で繋げます。
サンプル
let fruits = [
{ name: 'Apple', price: 150 },
{ name: 'Orange', price: 100 },
{ name: 'Melon', price: 2300 }
];
___ih_hl_start
console.log(fruits[0]['name']);
___ih_hl_end
Apple
7行目のfruits[0]['name']
が多次元配列の値の取得です。
このコードを1つずつ解釈すると次のようになります。
No | コード | 解釈 |
---|---|---|
1 | fruits |
変数fruits を示す。 |
2 | fruits[0] |
変数(配列)fruits のキー0 の値を取得
→ 連想配列 { name: 'Apple', price: 150 } |
3 | fruits[0]['name'] |
No.2で取得した配列のキー'name' の値を取得
→ 'Apple' |
このように次元を1つずつ辿ることで、次元数が多い多次元配列でも同様に扱うことができます。
値の記憶
多次元配列に値を記憶するには取得の時と同様に次元ごとのキーを指定して値を代入します。
基本構文
変数[キー1][キー2]... = 値
値の取得と同様に次元を1つずつキーで辿って指定し、既に同じキーが存在する場合は値を上書き、存在しない場合は新しい記憶領域に指定したキーで値を記憶します。
サンプル
let fruits = [
{ name: 'Apple', price: 150 },
{ name: 'Orange', price: 100 },
{ name: 'Melon', price: 2300 }
];
___ih_hl_start
fruits[1]['price'] = 200;
___ih_hl_end
console.log(fruits);
(3) [{…}, {…}, {…}]
0:
name: "Apple"
price: 150
1:
name: "Orange"
price: 200
2:
name: "Melon"
price: 2300
7行目が多次元配列の値の記憶です。
値の取得と同様に1つずつキーで次元を辿って値を記憶しています。
また、配列を記憶し、2次元目の配列の個数を増やすことも可能です。
let fruits = [
{ name: 'Apple', price: 150 },
{ name: 'Orange', price: 100 },
{ name: 'Melon', price: 2300 }
];
___ih_hl_start
fruits[3] = { name: 'Pineapple', price: 1200 };
___ih_hl_end
console.log(fruits);
(4) [{…}, {…}, {…}, {…}]
0:
name: "Apple"
price: 150
1:
name: "Orange"
price: 200
2:
name: "Melon"
price: 2300
3:
name: "Pineapple"
price: 1200